package com.ihighest.app.infox.tools;

import java.lang.reflect.Field;

import android.content.Context;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.ihighest.app.infox.R;

/**
 * Created by eric on 15-10-5. 版权 ： 斑马网信（北京）科技有限公司
 */

public class Constants {
	// 默认的是中号的字体，当前页面的字体
	public static int current_font = 0x0002;
	// 这个target设置好后，应该存在share里面,要将当前页面设置为型号的字体
	public static int target = 0x0002;

	public static final int max = 0x0003;
	public static final int mid = 0x0002;
	public static final int min = 0x0001;

	/**
	 * @param context
	 *            上下文
	 * @param obj
	 *            你想要改变页面字体的实例对象
	 * @param isInit
	 *            当前页面是否是第一次初始化
	 */
	public static void changeSize(Context context, Object obj, boolean isInit) {
		/*
		 * if(target == current_font){ return; }
		 */

		if (isInit) {
			// 默认的初始化的字体是中号，一般都是在onCreate方法里面调用
			current_font = mid;
		}
		// 得到所有已经声明的字段,得到传过来对象所有的变量<包括私有变量>
		Field[] fields = obj.getClass().getDeclaredFields();
		// 如果当前的字体是最大号
		if (current_font == max) {
			// 根据要转化target字体大小进行比较
			switch (target) {
			case mid:
				for (Field field : fields) {
					// 设置这个原因是当变量是私有变量的时候，能够暴力破解得到变量的值
					field.setAccessible(true);
					// 只需要得到你想要设置字体大小的控件，就去设置
					if (field.getType().getSimpleName().equals(TextView.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							TextView textview = (TextView) field.get(obj);
							// 如果要从max-->mid 字体，所有要使字体变小，得道当前的字体减去一个固定值,
							// 如果从大号变到中号 那么当前的大小应该减去4sp，如果从大号减到小号那么当前的大小应该减去8sp
							// 减去的值自己定
							// 这个值得到是像素px，我们要将它转化为sp
							float textsize = textview.getTextSize() - context.getResources().getDimension(R.dimen.min);
							// 这个我们需要传入sp,他会自动根据当前屏幕进行适配，转化为px
							textview.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}

					} else if (field.getType().getSimpleName().equals(EditText.class.getSimpleName())) {
						// 每个控件都是一样，得到这个控件值，设置大小即可
						/*
						 * try { //得到这个变量的实例 EditText
						 * editText=(EditText)field.get(obj);
						 * //这个值得到是像素px，我们要将它转化为sp float
						 * textsize=editText.getTextSize
						 * ()-context.getResources().getDimension(R.dimen.min);
						 * //这个我们需要传入sp,他会自动根据当前屏幕进行适配，例如设置textsize
						 * 是1,当前density=2,则这个textsize大小就是1sp*density
						 * editText.setTextSize(Utils.px2dip(context,textsize));
						 * } catch (IllegalAccessException e) {
						 * e.printStackTrace(); }
						 */

					} else if (field.getType().getSimpleName().equals(Button.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							Button button = (Button) field.get(obj);
							// 这个值得到是像素px，我们要将它转化为sp
							float textsize = button.getTextSize() - context.getResources().getDimension(R.dimen.min);
							// 这个我们需要传入sp,他会自动根据当前屏幕进行适配，例如设置textsize
							// 是1,当前density=2,则这个textsize大小就是1sp*density
							button.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}
					}
					// .........匹配各种不同的控件
				}
				break;
			case min:// 如果要从max-->min 字体
				for (Field field : fields) {
					// 设置这个原因是当变量是私有变量的时候，能够暴力破解得到变量的值
					field.setAccessible(true);
					if (field.getType().getSimpleName().equals(TextView.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							TextView textview = (TextView) field.get(obj);
							float textsize = textview.getTextSize() - context.getResources().getDimension(R.dimen.mid);
							textview.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}

					} else if (field.getType().getSimpleName().equals(EditText.class.getSimpleName())) {

					} else if (field.getType().getSimpleName().equals(Button.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							Button button = (Button) field.get(obj);
							// 这个值得到是像素px，我们要将它转化为sp
							float textsize = button.getTextSize() - context.getResources().getDimension(R.dimen.mid);
							// 这个我们需要传入sp,他会自动根据当前屏幕进行适配，
							button.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}
					}
				}
				break;
			}
			;
		} else if (current_font == mid) {
			switch (target) {
			case max:
				for (Field field : fields) {
					// 设置这个原因是当变量是私有变量的时候，能够暴力破解得到变量的值
					field.setAccessible(true);
					if (field.getType().getSimpleName().equals(TextView.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							TextView textview = (TextView) field.get(obj);
							float textsize = textview.getTextSize() + context.getResources().getDimension(R.dimen.min);
							textview.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}

					} else if (field.getType().getSimpleName().equals(EditText.class.getSimpleName())) {

					} else if (field.getType().getSimpleName().equals(Button.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							Button button = (Button) field.get(obj);
							// 这个值得到是像素px，我们要将它转化为sp
							float textsize = button.getTextSize() + context.getResources().getDimension(R.dimen.min);
							// 这个我们需要传入sp,他会自动根据当前屏幕进行适配，
							button.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}
					}
				}
				break;
			case min:
				// 当前的字体是中号字体，我要把它变成小号的字体,把当前类的所有变量都遍历一遍，根据条件判断，
				// 筛选出我要改变字体大小的控件
				for (Field field : fields) {
					// 设置这个原因是当变量是私有变量的时候，能够暴力破解得到变量的值
					field.setAccessible(true);
					if (field.getType().getSimpleName().equals(TextView.class.getSimpleName())) {
						try {

							// 得到这个变量的实例
							TextView textview = (TextView) field.get(obj);
							float textsize = textview.getTextSize() - context.getResources().getDimension(R.dimen.min);
							textview.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}

					} else if (field.getType().getSimpleName().equals(EditText.class.getSimpleName())) {

					} else if (field.getType().getSimpleName().equals(Button.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							Button button = (Button) field.get(obj);
							// 这个值得到是像素px，我们要将它转化为sp
							float textsize = button.getTextSize() - context.getResources().getDimension(R.dimen.min);
							// 这个我们需要传入sp,他会自动根据当前屏幕进行适配
							button.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}
					}
				}
				break;
			}
			;

		} else if (current_font == min) {
			switch (target) {
			case max:
				for (Field field : fields) {
					// 设置这个原因是当变量是私有变量的时候，能够暴力破解得到变量的值
					field.setAccessible(true);
					if (field.getType().getSimpleName().equals(TextView.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							TextView textview = (TextView) field.get(obj);
							float textsize = textview.getTextSize() + context.getResources().getDimension(R.dimen.mid);
							textview.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}

					} else if (field.getType().getSimpleName().equals(EditText.class.getSimpleName())) {

					} else if (field.getType().getSimpleName().equals(Button.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							Button button = (Button) field.get(obj);
							// 这个值得到是像素px，我们要将它转化为sp
							float textsize = button.getTextSize() + context.getResources().getDimension(R.dimen.mid);
							// 这个我们需要传入sp,他会自动根据当前屏幕进行适配，例如设置textsize
							// 是1,当前density=2,则这个textsize大小就是1sp*density
							button.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}
					}
				}
				break;
			case mid:
				for (Field field : fields) {
					// 设置这个原因是当变量是私有变量的时候，能够暴力破解得到变量的值
					field.setAccessible(true);
					if (field.getType().getSimpleName().equals(TextView.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							TextView textview = (TextView) field.get(obj);
							float textsize = textview.getTextSize() + context.getResources().getDimension(R.dimen.min);
							textview.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}

					} else if (field.getType().getSimpleName().equals(EditText.class.getSimpleName())) {

					} else if (field.getType().getSimpleName().equals(Button.class.getSimpleName())) {
						try {
							// 得到这个变量的实例
							Button button = (Button) field.get(obj);
							// 这个值得到是像素px，我们要将它转化为sp
							float textsize = button.getTextSize() + context.getResources().getDimension(R.dimen.min);
							// 这个我们需要传入sp,他会自动根据当前屏幕进行适配，例如设置textsize
							// 是1,当前density=2,则这个textsize大小就是1sp*density
							button.setTextSize(Utils.px2dip(context, textsize));
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						}
					}
				}

				break;
			}
			;

		}

		current_font = target;

	}
}
